package com.plm.mqshequ.nosql;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;

/**
 * @author Limi
 * @create 2019-01-16 9:28
 */
@Repository
public class RedisKeyOps {

    @Autowired
    private StringRedisTemplate template;

    /**
     * <pre>
     *  KEYS pattern
     *     查找所有符合给定模式 pattern 的 key
     *     KEYS * 匹配数据库中所有 key
     *     KEYS h?llo 匹配 hello ， hallo 和 hxllo 等
     *     KEYS h*llo 匹配 hllo 和 heeeeello 等
     * </pre>
     */
    public Set<String> keys(String pattern) {
        return template.keys(pattern);
    }

    /**
     * EXISTS key
     * 检查给定 key 是否存在
     */
    public Boolean exists(String key) {
        return template.hasKey(key);
    }

    /**
     * DEL key
     * 删除给定的一个
     */
    public void del(String key) {
        template.delete(key);
    }

    /**
     * DEL key [key ...]
     * 删除给定的一个或多个 key
     */
    public void del(List keys) {
        template.delete(keys);
    }

    /**
     * expire key seconds
     * 为给定 key 设置生存时间，当 key 过期时(生存时间为 0 )，它会被自动删除。
     */
    public Boolean expire(String key, long timeout) {
        return template.expire(key, timeout, TimeUnit.SECONDS);
    }

    /**
     * ttl key
     * 以秒为单位，返回给定 key 的剩余生存时间(TTL, time to live)
     */
    public Long ttl(String key) {
        return template.getExpire(key);
    }

}
